import axios from 'axios'
import router from '@/router'
import { getToken, removeToken } from '@/utils/token'

// 创建axios实例，指向真实后端API - 已测试
const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    const token = getToken();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    
    return config;
  },
  error => {
    return Promise.reject(error);
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 状态码正常，但业务上可能有错误
    if (response.data && response.data.code !== 0) {
      console.error('业务请求错误:', {
        url: response.config.url,
        method: response.config.method,
        params: response.config.params,
        data: response.config.data,
        response: response.data
      });
      
      return Promise.reject({
        response,
        data: response.data,
        message: response.data.message || '操作失败'
      });
    }
    
    // 调试信息 - 仅在开发环境打印
    if (process.env.NODE_ENV !== 'production') {
      console.log('请求成功:', response.config.url, response.data);
    }
    
    return response.data;
  },
  error => {
    console.error('HTTP请求错误:', {
      url: error.config?.url || '未知URL',
      method: error.config?.method || '未知方法',
      params: error.config?.params,
      data: error.config?.data,
      error: error.message || '未知错误'
    });
    
    if (error.response) {
      // 打印详细错误信息
      console.error('服务器返回错误:', {
        status: error.response.status,
        statusText: error.response.statusText,
        data: error.response.data
      });
      
      // 处理 401 未授权错误
      if (error.response.status === 401) {
        // Token 无效或过期，清除本地存储的 token
        removeToken();
        
        // 跳转到登录页
        if (router.currentRoute.value.path !== '/login') {
          router.push('/login');
        }
      }
      
      return Promise.reject(error.response.data || { message: '请求失败' });
    } else if (error.request) {
      console.error('网络请求未收到响应:', error.request);
      return Promise.reject({ message: '网络错误，请检查您的网络连接' });
    } else {
      console.error('请求配置错误:', error);
      return Promise.reject({ message: '请求配置错误' });
    }
  }
)

export default request 